Java基础知识(一)

Author Avatar
子语 2017 - 09 - 23
  • 在其它设备中阅读本文章

Java基础知识

Java是一门面向对象语言,支持多线程编程;通过使用更为简单的引用来进行内存关系的匹配,而不是复杂的指针;Java提供垃圾自动回收机制,能更好地处理垃圾空间;可以实现多平台的移植。

第一个Java程序

  1. 运行Java程序的步骤
    javac xx.java:对Java程序进行编译,生成字节码文件xx.class
    java xx:对Java程序进行解释。
  2. Java程序的核心单元—
    类的声明方式有两种:
    public class class_name {}:该声明方式声明的java文件,文件名必须与类名一致,一个类文件中只允许使用一次该声明。
    class class_name {}:一个java文件可以多次使用该声明(不建议如此操作),但编译后会生成多个class文件。
  3. 第一个Java程序:Hello World
package com.java.demo;    		// 包名
public class HelloWorld {		// 类
	public static void main(String[] args) {    // 主方法
		System.out.println("Hello World");    // 方法体
	}
}

Java程序都是从主方法开始执行的.System.out.println()将内容输出后换行。

CLASSPATH环境属性

PATH和CLASSPTH的区别PATH是操作系统路径,定义了所有可执行程序的路径;CLASSPATH是Java解释类文件时的加载路径,当java命令运行时,JVM通过CLASSPATH属性设置的路径,加载所需要的类。
配置CLASSPATH时,一定要定义一个“.”,表示在当前所在目录进行类的加载。

注释

// 注释内容: 单行注释
/* 注释内容 */: 多行注释
/** 注释内容 */:文档注释

标识符与关键字

  1. 标识符
    标识符是指Java程序中的类名、属性名、方法名等,其定义要求如下:

    (1)标识符由字母,数字,_,$组成,不能以数字开头,不能是Java中的关键字或保留字;
    (2)标识符应尽量有意义,可见名知意。
    (3)Java标识符可以是中文,但不建议使用中文命名标识符。

  2. 关键字
    Java中有两个未使用的关键字gotoconst;JDK1.4之后增加了assert关键字;JDK1.5之后增加了enum关键字。

Java数据类型

  1. Java数据类型分为两大类:基础数据类型引用数据类型
    两者的区别在于基础数据类型不需要进行内存分配,而引用数据类型需要进行内存分配。

基本数据类型:
    |-数值型:
        |-整型:byteshortintlong; →默认值:0
        |-浮点型:floatdouble; →默认值:0.0
        |-字符型:char; →默认值:‘\u0000’
        |-布尔型:boolean; →默认值:false
    |-引用数据类型:数组、类、接口等。 →默认值:null

  1. 数据类型的选择原则

(1)整数用int,小数用double
(2)描述日期时间或内存大小,用long
(3)实现内容传递或编码转换用byte
(4)逻辑控制用boolean
(5)避免中文乱码用char

整型

  1. 数字常量属于int型数据,如数字30。
    常量与变量的区别在于:常量的内容是固定的,变量的内容是可变的。范例–定义int型变量:
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        // 一个变量名在同一块代码中只允许声明一次
        // 变量赋值语法:value_type value_name = value ;
        int num = 10; 
        num = num * 2;
        System.out.println(num);
    }
}
  1. 每个数据类型都有其对应的存储范围
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        int max = Integer.MAX_VALUE;  // int型数据的最大值
        int min = Integer.MIN_VALUE;  // int型数据的最小值
        System.out.println(max);      // 2147483647
        System.out.println(max + 1);  // -2147483648
        System.out.println(min);      // -2147483648
        System.out.println(min - 1);  // 2147483647
        System.out.println(min - 2);  // 2147483646
    }
}

当数据超过int型数据的保存范围时,数值会按照循环的形式出现,即(最大值+1)变为最小值,再+1变为第二小的最小值,以此类推。这是因为数据是按照二进制进行的,第一位是符号位,而其他31位是数据位。这种现象称为数据溢出,解决方法是扩大数据范围

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        int max = Integer.MAX_VALUE;
        int min = Integer.MIN_VALUE;
        // int变量 + long变量 = long变量,扩大了数据的范围
        System.out.println(max + 1L); // 2147483648
        System.out.println(min - (long)1); // -2147483649
        System.out.println((long)min - 2); // -2147483650
    }
}
  1. 数据类型的转换规律

范围小的数据类型与范围大的数据类型计算时,自动转换为范围大的所数据类型;
范围大的数据类型只能通过强制转换变为范围小的数据类型。
常量进行强制转换,可通过使用常量标记(如L,l可将int型常量变为long型)或使用(数据类型)常量。范例–强制转换:

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        // 1000是int型,使用long型变量接收,发生自动转换
        long num = 1000;
	    // long型变为int型,强制转换
        int x = (int) num; 
        System.out.println(x); // 1000
    }
}

当进行强制转换的数值超出范围小的数据类型的范围时,依然会发生数据溢出

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        // 2147483650L是long型数据,超出int型的范围
        long num = 2147483650L ;
        int x = (int) num; 
        System.out.println(x); // -2147483646,数据溢出
    }
}

byte型数据的取值范围为-128~127,当整数数值在这个范围内时,会自动转型;超出byte范围时会发生数据溢出。
4. 注意点
变量声明时应设置具体数值,不使用默认值。在方法中定义的变量,其默认值是无效的。

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        // 未给变量赋值
		int num;  
		// 报错,未初始化变量,无法使用该变量
        System.out.println(num); 
    }
}

浮点型

  1. Java中浮点数属于double型(double型是保存范围最广的类型)。
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        double num = 10.2; // 10.2是小数,属于double型
        // double型 * int型 = double型
        System.out.println(num * 2); // 20.4
    }
}

所以使用float数据须将double强制转换为float型

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        float fA = 10.2F;         // 强制转型方式一
        float fB = (float) 10.2; // 强制转型方式二
        System.out.println(fA);  // 10.2
        System.out.println(fB);  // 10.2
        System.out.println(fA * fB); // 104.03999,该bug无法解决
    }
}

开发过程中要考虑到整型数据不保留小数位

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        int x = 5;
        int y = 9;
        System.out.println(y / x); // 1
    }
}

因为int型/int型=int型,不保留小数位,所以要取得正确的计算结果,需要将其中一个整型变为浮点型:

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        int x = 5;
        int y = 9;
        System.out.println(y / (double) x); // 1.8
    }
}

字符型

  1. byte
    byte是字节,1字符=2字节。Java使用十六进制UNICODE编码,可以保存任意符号,并且考虑到与其他语言的结合,包含了ASCII码的部分编码,以实现无缝衔接。
  2. 字符使用单引号'声明,一对单引号只能保存一位字符。
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        char c = 'A';
        int num = c; // char型可以自动转换为int型
        System.out.println(c);
        System.out.println(num); // 65,是A的ASCII码值
    }
}
  1. 编码:'A'(65)~'Z'(90); 'a'(97)~'z'(122); '0'(48)~'9'(57),可利用A和a的编码差为32,实现字母大小写转换:
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        char c = 'A';
        int num = c;     // char型变为int型才能进行四则运算
        num = num + 32;  // 大写与小写编码值差为32
        c = (char) num;  // int型只能强制转换为char型
        System.out.println(c); // a
    }
}
  1. 传统编程语言字符只能保存英文标记,但UNICODE可以保存任何文字包括中文。
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        char c = '游';
        int num = c;
        System.out.println(num); // 28216
    }
}

由于Java保存中文很方便,因此处理断句时,字符数据很有用,其他时候基本用不到。

布尔型

布尔型返回逻辑结果,只保存两种数据:truefalse,主要用于逻辑控制:

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        boolean flag = false;
        //  if (布尔值){满足条件时的操作}
        if (!flag) {
            System.out.println("Hello World !");
        }
    }
}

String型

  1. String型
    String属于引用数据类型(是类,Java中类名称首字母大写),表示字符串,即多个字符的集合,使用双引号""声明。
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        String str = "Hello World !"; // str为字符串变量
        System.out.println(str);
        // "Hello World !"为字符串常量
        System.out.println("Hello World !");
    }
}
  1. +可实现字符串连接
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        String str = "Hello";
        str = str + " World !";
        System.out.println(str);
    }
}

当四则运算与字符串连接同时存在时:

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        int numA = 100;
        double numB = 99.9;
        String str = "加法计算:" + numA + numB;
        System.out.println(str); // 加法计算:10099.9
    }
}

出现上述结果是因为小范围数据会自动转型为大范围数据,即String型+任意数据类型=String型,然后进行字符串连接,可使用()来实现正确的运算:

package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        int numA = 100;
        double numB = 99.9;
        String str = "加法计算:" + (numA + numB);
        System.out.println(str); // 加法计算:199.9
    }
}
  1. Java支持转义字符,
    例如:换行\n、制表符\t、反斜杠\\、双引号\"、单引号\'
package com.java.demo;
public class Demo {
    public static void main(String[] args) {
        String str = "Hello \"World\" \nHello MLDN";
        System.out.println(str);
        /**
         * Hello "World"
         * Hello MLDN
         */
    }
}

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:http://yov.oschina.io/article/Java/Java Base/Java基础知识(一)/